package com.tfjybj.itoo.teach.provider.service;

import com.dmsdbj.itoo.tool.base.service.BaseServicePlus;
import com.dmsdbj.itoo.tool.business.ItooResult;
import com.github.pagehelper.PageInfo;
import com.tfjybj.itoo.teach.entity.BuildingEntity;
import com.tfjybj.itoo.teach.model.BuildingModel;
import com.tfjybj.itoo.teach.model.FooGroupTreeModel;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.List;


/**
 * BuildingService接口
 * building表
 *
 * @author 田成荣
 * @version 2.0.0
 * @since 2.0.0 2018-11-08 19:34:10
 */
@SuppressWarnings("ALL")
public interface BuildingService extends BaseServicePlus<BuildingEntity> {
	
	//region 模板生成：模糊查询
	/**
     * 根据建筑名称模糊查询building
     *
     * @param name  建筑名称
     * @param pageNo   页码
     * @param pageSize 页数
     * @return 模糊查询的building
     * @author 田成荣
     * @since 2.0.0 2018-11-08 19:34:10
     */
    PageInfo<BuildingEntity> queryByLikeName(String name, Integer pageNo, Integer pageSize);
	//endregion

    /* **********************************以下为非模板生成的内容********************************* */
    /**
     * 根据校区Id查询所有该校区的所有建筑
     *
     * @param schoolBranch 校区Id
     * @return buildingModel
     * @author 段恩刚
     * @since 2.0.0 2018-11-13 19:34:10
     */
    List<BuildingModel> queryAllBuildings(String schoolBranch);

    /**
     * 根据前十条建筑信息
     * @param
     * @return buildingModel
     * @author 段恩刚
     * @since 2.0.0 2018-11-13 19:34:10
     */
    List<BuildingModel> queryTop10Buildings();

    /**
     * 根据建筑名称查询建筑
     * @param buildingName 建筑名称
     * @return buildingModel
     * @author 段恩刚
     * @since 2.0.0 2018-11-14 19:34:10
     */
 List<BuildingModel> queryBuildingByName(String buildingName);

    /**
     * 根据建筑类型查询建筑
     *
     * @param buildingType 建筑类型
     * @return buildingModel
     * @author 段恩刚
     * @since 2.0.0 2018-11-15 19:34:10
     */
    List<BuildingModel> queryBuildingsByType(String buildingType);

    /**
     * 根据建筑名称或类型模糊查询building
     * @param buildingName  建筑名称
     * @param buildingType  建筑类型
     * @param pageNo   页码
     * @param pageSize 页数
     * @return buildingModel
     * @author 段恩刚
     * @since 2.0.0 2018-11-15 19:34:10
     */
PageInfo<BuildingModel> queryBuildingsLikeNameOrType(String buildingName, String buildingType, Integer pageNo, Integer pageSize);


    /**
     * 页面Roommanage加载时查询所有的buildingId
     * @param
     * @return buildingModel
     * @author 段恩刚
     * @since 2.0.0 2018-11-13 19:34:10
     */
    List<BuildingModel> queryAllBuildingIds();

    /**
     * 根据buildingName导出building
     *
     * @param bulidingName  buildingName
     * @param response response
     * @return 是否导出成功
     * @author 段恩刚
     * @since 1.0.0 2018-11-24 20:15:55
     */
    boolean exportByLikeName(String bulidingName, HttpServletResponse response);

    /**
     * 下载培养计划模板，批量导入使用
     *
     * @param response 响应
     * @return 下载模板是否成功
     * @author 段恩刚
     * @since 2.0.0 2018-11-15 08:53:53
     */
    boolean downLoadTemplate(HttpServletResponse response);

    /**
     * 批量导入
     * 批量导入建筑信息，并返回是否成功
     * @param response 响应
     * @param multipartFile
     * @param request
     * @return 导入是否成功
     * @author 段恩刚
     * @since 2.0.0 2018/11/15 14:33
     */
    ItooResult importTemplate(MultipartFile multipartFile, HttpServletRequest request, HttpServletResponse response);

    /**
     * 根据建筑名称获取建筑Id
     * 根据建筑名称获取建筑Id，供批量导入房间信息时使用
     * @param buildingName 建筑名称
     * @return buildingId
     * @author 段恩刚
     * @since 2.0.0 2018-11-28 19:34:10
     */
    String queryBuildingIdByName(String buildingName);

    /**
     * 导出错误数据
     *
     * @param response 响应
     * @param errorListId 为成功导入的分组id
     * @return 课程信息model
     * @author 段恩刚
     * @since 2018年11月30日11:32:54
     */
    boolean downErrorList(String errorListId, HttpServletResponse response);

    /**
     * 查询fooGroup的树形结构
     * @return fooGroup的树形结构
     * @author 段恩刚
     * @since 1.0.0 2018-11-30 15:51:27
     */
    List<FooGroupTreeModel> queryTreeModel();

    /**
     * 根据建筑code和建筑名称判断建筑是否已经存在
     * @param buildingCode 建筑code
     * @param buildingName 建筑名称
     * @return 建筑id
     * @author 段恩刚
     * @since 2.0.0 2018/11/27 19:19
     */
    String findIdIsExist(String buildingCode, String buildingName);

    /**
     * 无参查询Building建筑父节点及建筑信息集合BuildingEntity
     * @return List<BuildingEntity>
     * @auther 智雪艳
     * @since 2019/05/23 19:19
     */
    List<BuildingEntity> findBuilding();

}


